package com.chl.legou.core.utils;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

public class GenericUtil {
    public static <T> Class<T> getSuperGenericClass(Class<?> clz){
        Class<T> result = null;
        Type superclass = clz.getGenericSuperclass();
        //判断类型是否为参数类型
        if(superclass instanceof ParameterizedType){
            //把父类类型转换成参数化类型（泛型类型）
            ParameterizedType parameterizedType = (ParameterizedType) superclass;
            //得到参数化类型，类型的参数
            Type[] types = parameterizedType.getActualTypeArguments();
            //返回子类传递的类型
            result = (Class<T>) types[0];

        }
        return result;
    }

    public static <T> Class<T> getSuperGenericClass2(Class<?> clz){
        Class<T> result = null;
        //得到当前对象的父类"泛型类型"(也叫参数化类型)
        Type superclass = clz.getGenericSuperclass();
        //判断类型是否为参数类型
        if(superclass instanceof ParameterizedType){
            //把父类类型转换成参数化类型（泛型类型）
            ParameterizedType parameterizedType = (ParameterizedType) superclass;
            //得到参数化类型，类型的参数
            Type[] types = parameterizedType.getActualTypeArguments();
            //返回子类传递的类型
            result = (Class<T>) types[1];

        }
        return result;
    }
}
